package Algorithm.IntegratedPractice;


/**
 * ClassName:PracticeText002
 * Package:Algorithm.IntegratedPractice
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/2/5-0:04
 * @Version:v1.0
 */
public class PracticeText002 {
    /*
     * 有一个很有名的数学逻辑题叫做不死神兔问题,有一只兔子,从出生后第三个月起每个月都生一对兔子
     * 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第十二个月的兔子对数为多少*/
    //1月-1   2月-1   3月-2   4月-3  ……斐波那契
    public static void main(String[] args) {
        //创建一个长度为12的数组
        int[] arr = new int[12];
        //第一种求解:
        extracted(arr);
        //第二种求解：
        //递归的方式求解
        /*
         * Fn(12)=Fn(11)+Fn(10)
         * Fn(11)=Fn(10)+Fn(9)*/
        int sum = getMaxNumber(12);
        System.out.println("第十二个月的兔子对数为"+sum);
    }

    private static int getMaxNumber(int month) {
        if (month == 1 || month == 2) {
            return 1;
        }
        return getMaxNumber(month - 1) + getMaxNumber(month - 2);
    }

    private static void extracted(int[] arr) {
        //手动给0索引和1索引的数据进行赋值
        arr[0] = 1;
        arr[1] = 1;
        //利用循环给剩余的数据进行赋值
        for (int i = 2; i < arr.length; i++) {
            arr[i] = arr[i - 1] + arr[i - 2];
        }
        //获取最大索引上的数据即可
        System.out.println(arr[11]);
    }
}
